//// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
//
Shader "custom/Standard (Specular setup)-New-Grass"
{
//	Properties
//	{
//		_Color("Color", Color) = (1,1,1,1)
//		_MainTex("Albedo", 2D) = "white" {}
//		
//		_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
//
//		_Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
//		_GlossMapScale("Smoothness Factor", Range(0.0, 1.0)) = 1.0
//		[Enum(Specular Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel ("Smoothness texture channel", Float) = 0
//
//		_SpecColor("Specular", Color) = (0.2,0.2,0.2)
//		_SpecGlossMap("Specular", 2D) = "white" {}
//		[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
//		[ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
//
//		_BumpScale("Scale", Float) = 1.0
//		_BumpMap("Normal Map", 2D) = "bump" {}
//
//		_Parallax ("Height Scale", Range (0.005, 0.08)) = 0.02
//		_ParallaxMap ("Height Map", 2D) = "black" {}
//
//		_OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
//		_OcclusionMap("Occlusion", 2D) = "white" {}
//
//		_EmissionColor("Color", Color) = (0,0,0)
//		_EmissionMap("Emission", 2D) = "white" {}
//		
//		_DetailMask("Detail Mask", 2D) = "white" {}
//
//		_DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
//		_DetailNormalMapScale("Scale", Float) = 1.0
//		_DetailNormalMap("Normal Map", 2D) = "bump" {}
//
//		[Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0
//
//
//		// Blending state
//		[HideInInspector] _Mode ("__mode", Float) = 0.0
//		[HideInInspector] _SrcBlend ("__src", Float) = 1.0
//		[HideInInspector] _DstBlend ("__dst", Float) = 0.0
//		[HideInInspector] _ZWrite ("__zw", Float) = 1.0
//		[Enum(Off,0,Front,1,Back,2)] _Cull ("Cull", Float) = 2
//	}
//
//	CGINCLUDE
//		#define UNITY_SETUP_BRDF_INPUT SpecularSetup
//	ENDCG
//
//	SubShader
//	{
//		Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
//		LOD 300
//	
//
//		// ------------------------------------------------------------------
//		//  Base forward pass (directional light, emission, lightmaps, ...)
//		Pass
//		{
//			Name "FORWARD" 
//			Tags { "LightMode" = "ForwardBase" }
//
//			Blend [_SrcBlend] [_DstBlend]
//			ZWrite [_ZWrite]
//			Cull [_Cull]
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_fwdbase
//			#pragma multi_compile_fog
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertBase
//			#pragma fragment fragBase
//
//			#include "UnityStandardConfig.cginc"
//
//
//
//
//			#if UNITY_STANDARD_SIMPLE
//			    #include "UnityStandardCoreForwardSimple.cginc"
//			    VertexOutputBaseSimple vertBase (VertexInput v) { return vertForwardBaseSimple(v); }
//			    VertexOutputForwardAddSimple vertAdd (VertexInput v) { return vertForwardAddSimple(v); }
//			    half4 fragBase (VertexOutputBaseSimple i) : SV_Target { return fragForwardBaseSimpleInternal(i); }
//			    half4 fragAdd (VertexOutputForwardAddSimple i) : SV_Target { return fragForwardAddSimpleInternal(i); }
//			#else
//			    #include "UnityStandardCore.cginc"
//
//			    VertexOutputForwardBase vertForwardBase2 (VertexInput v)
//				{
//				    UNITY_SETUP_INSTANCE_ID(v);
//				    VertexOutputForwardBase o;
//				    UNITY_INITIALIZE_OUTPUT(VertexOutputForwardBase, o);
//				    UNITY_TRANSFER_INSTANCE_ID(v, o);
//				    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
//
//				    float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
//				    #if UNITY_REQUIRE_FRAG_WORLDPOS
//				        #if UNITY_PACK_WORLDPOS_WITH_TANGENT
//				            o.tangentToWorldAndPackedData[0].w = posWorld.x;
//				            o.tangentToWorldAndPackedData[1].w = posWorld.y;
//				            o.tangentToWorldAndPackedData[2].w = posWorld.z;
//				        #else
//				            o.posWorld = posWorld.xyz;
//				        #endif
//				    #endif
//				    o.pos = UnityObjectToClipPos(v.vertex);
//
//				    o.tex = TexCoords(v);
//				    o.eyeVec = NormalizePerVertexNormal(posWorld.xyz - _WorldSpaceCameraPos);
//				    float3 normalWorld = UnityObjectToWorldNormal(v.normal);
//				    fixed ndotl = dot(_WorldSpaceLightPos0.xyz, normalWorld);
//				    normalWorld = _WorldSpaceLightPos0.xyz;
//
//				    #ifdef _TANGENT_TO_WORLD
//				        float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
//
//				        float3x3 tangentToWorld = CreateTangentToWorldPerVertex(normalWorld, tangentWorld.xyz, tangentWorld.w);
//				        o.tangentToWorldAndPackedData[0].xyz = tangentToWorld[0];
//				        o.tangentToWorldAndPackedData[1].xyz = tangentToWorld[1];
//				        o.tangentToWorldAndPackedData[2].xyz = tangentToWorld[2];
//				    #else
//				        o.tangentToWorldAndPackedData[0].xyz = 0;
//				        o.tangentToWorldAndPackedData[1].xyz = 0;
//				        o.tangentToWorldAndPackedData[2].xyz = normalWorld;
//				    #endif
//
//				    //We need this for shadow receving
//				    UNITY_TRANSFER_SHADOW(o, v.uv1);
//
//				    o.ambientOrLightmapUV = VertexGIForward(v, posWorld, normalWorld);
//
//				    #ifdef _PARALLAXMAP
//				        TANGENT_SPACE_ROTATION;
//				        half3 viewDirForParallax = mul (rotation, ObjSpaceViewDir(v.vertex));
//				        o.tangentToWorldAndPackedData[0].w = viewDirForParallax.x;
//				        o.tangentToWorldAndPackedData[1].w = viewDirForParallax.y;
//				        o.tangentToWorldAndPackedData[2].w = viewDirForParallax.z;
//				    #endif
//
//				    UNITY_TRANSFER_FOG(o,o.pos);
//				    return o;
//				}
//
//			    VertexOutputForwardBase vertBase (VertexInput v) { return vertForwardBase2(v); }
//			    VertexOutputForwardAdd vertAdd (VertexInput v) { return vertForwardAdd(v); }
//			    half4 fragBase (VertexOutputForwardBase i) : SV_Target { return fragForwardBaseInternal(i); }
//			    half4 fragAdd (VertexOutputForwardAdd i) : SV_Target { return fragForwardAddInternal(i); }
//
//
//			#endif
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Additive forward pass (one light per pass)
//		Pass
//		{
//			Name "FORWARD_DELTA"
//			Tags { "LightMode" = "ForwardAdd" }
//			Blend [_SrcBlend] One
//			Fog { Color (0,0,0,0) } // in additive pass fog should be black
//			ZWrite Off
//			ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_fwdadd_fullshadows
//			#pragma multi_compile_fog
//
//			#pragma vertex vertAdd
//			#pragma fragment fragAdd
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Shadow rendering pass
//		Pass {
//			Name "ShadowCaster"
//			Tags { "LightMode" = "ShadowCaster" }
//
//			ZWrite On ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 3.0
//
//			// -------------------------------------
//
//
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _PARALLAXMAP
//			#pragma multi_compile_shadowcaster
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertShadowCaster
//			#pragma fragment fragShadowCaster
//
//			#include "UnityStandardShadow.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Deferred pass
//		Pass
//		{
//			Name "DEFERRED"
//			Tags { "LightMode" = "Deferred" }
//
//			CGPROGRAM
//			#pragma target 3.0
//			#pragma exclude_renderers nomrt
//
//
//			// -------------------------------------
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature _PARALLAXMAP
//
//			#pragma multi_compile_prepassfinal
//			#pragma multi_compile_instancing
//
//			#pragma vertex vertDeferred
//			#pragma fragment fragDeferred
//
//			#include "UnityStandardCore.cginc"
//
//			ENDCG
//		}
//
//		// ------------------------------------------------------------------
//		// Extracts information for lightmapping, GI (emission, albedo, ...)
//		// This pass it not used during regular rendering.
//		Pass
//		{
//			Name "META" 
//			Tags { "LightMode"="Meta" }
//
//			Cull Off
//
//			CGPROGRAM
//			#pragma vertex vert_meta
//			#pragma fragment frag_meta
//
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature EDITOR_VISUALIZATION
//
//			#include "UnityStandardMeta.cginc"
//			ENDCG
//		}
//	}
//
//	SubShader
//	{
//		Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
//		LOD 150
//
//		// ------------------------------------------------------------------
//		//  Base forward pass (directional light, emission, lightmaps, ...)
//		Pass
//		{
//			Name "FORWARD" 
//			Tags { "LightMode" = "ForwardBase" }
//
//			Blend [_SrcBlend] [_DstBlend]
//			ZWrite [_ZWrite]
//			Cull [_Cull]
//
//			CGPROGRAM
//			#pragma target 2.0
//			
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _EMISSION 
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
//
//			#pragma skip_variants SHADOWS_SOFT DYNAMICLIGHTMAP_ON DIRLIGHTMAP_COMBINED
//			
//			#pragma multi_compile_fwdbase
//			#pragma multi_compile_fog
//
//			#pragma vertex vertBase
//			#pragma fragment fragBase
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Additive forward pass (one light per pass)
//		Pass
//		{
//			Name "FORWARD_DELTA"
//			Tags { "LightMode" = "ForwardAdd" }
//			Blend [_SrcBlend] One
//			Fog { Color (0,0,0,0) } // in additive pass fog should be black
//			ZWrite Off
//			ZTest LEqual
//			
//			CGPROGRAM
//			#pragma target 2.0
//
//			#pragma shader_feature _NORMALMAP
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
//			#pragma shader_feature ___ _DETAIL_MULX2
//			// SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
//			#pragma skip_variants SHADOWS_SOFT
//			
//			#pragma multi_compile_fwdadd_fullshadows
//			#pragma multi_compile_fog
//			
//			#pragma vertex vertAdd
//			#pragma fragment fragAdd
//			#include "UnityStandardCoreForward.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		//  Shadow rendering pass
//		Pass {
//			Name "ShadowCaster"
//			Tags { "LightMode" = "ShadowCaster" }
//			
//			ZWrite On ZTest LEqual
//
//			CGPROGRAM
//			#pragma target 2.0
//
//			#pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma skip_variants SHADOWS_SOFT
//			#pragma multi_compile_shadowcaster
//
//			#pragma vertex vertShadowCaster
//			#pragma fragment fragShadowCaster
//
//			#include "UnityStandardShadow.cginc"
//
//			ENDCG
//		}
//		// ------------------------------------------------------------------
//		// Extracts information for lightmapping, GI (emission, albedo, ...)
//		// This pass it not used during regular rendering.
//		Pass
//		{
//			Name "META" 
//			Tags { "LightMode"="Meta" }
//
//			Cull Off
//
//			CGPROGRAM
//			#pragma vertex vert_meta
//			#pragma fragment frag_meta
//
//			#pragma shader_feature _EMISSION
//			#pragma shader_feature _SPECGLOSSMAP
//			#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
//			#pragma shader_feature ___ _DETAIL_MULX2
//			#pragma shader_feature EDITOR_VISUALIZATION
//
//			#include "UnityStandardMeta.cginc"
//			ENDCG
//		}
//	}
//
//	FallBack "VertexLit"
//	CustomEditor "NewStandardShaderGUI"
}
